package reflect_extend

import "reflect"

// 判断是否是指针
func IsPtr(v interface{}) bool {
	return reflect.TypeOf(v).Kind() == reflect.Ptr
}

// 判断reflect.Type类型是否相等
func IsTypeValueEqual(t1, t2 interface{}) bool {
	return reflect.TypeOf(t1) == reflect.TypeOf(t2)
}

func IsTypeEqual(t1, t2 reflect.Type) bool {
	if t1 == t2 {
		return true
	}
	if t1.Kind() == t2.Kind() && t1.Name() == t2.Name() {
		return true
	}
	return false
}

// 判断字段是否为空
func IsEmpty(v interface{}) bool {
	//如果是指针
	if IsPtr(v) {
		return reflect.ValueOf(v).IsNil()
	}
	return reflect.ValueOf(v).IsZero()
}

// 判断类型是否是接口的实现
// v: 类型,可以是指针,也可以是值
// iface: 接口,必须是指针,可以使用new(接口)创建
func IsImplement(v interface{}, iface interface{}) bool {
	var pd = reflect.TypeOf(v).Implements(reflect.TypeOf(iface).Elem()) || reflect.TypeOf(v).Implements(reflect.TypeOf(iface).Elem())
	if !pd && IsPtr(v) {
		//如果是指针,则取出指针内部的值
		v = GetPtrValue(v)
		return IsImplement(v, iface)
	}
	return pd
}
